{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 世界麻疹疫苗接种率线性回归与多项式回归预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Year</th>\n",
       "      <th>Values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1983</td>\n",
       "      <td>48.676809</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1984</td>\n",
       "      <td>50.653151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1985</td>\n",
       "      <td>45.603729</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1986</td>\n",
       "      <td>45.511160</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1987</td>\n",
       "      <td>52.882892</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Year     Values\n",
       "0  1983  48.676809\n",
       "1  1984  50.653151\n",
       "2  1985  45.603729\n",
       "3  1986  45.511160\n",
       "4  1987  52.882892"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "# 加载数据集\n",
    "df = pd.read_csv(\"../data/course-6-vaccine.csv\",header=0)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x13ce0068250>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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ygyWm5yqjz76SD0+fvy42j5nzhyVZX7kyBHLggULVEXCgAED0n4+KSnJUqtWLUuHDh0sGzdutBw+fNjywQcfqEqGxYsXq33WrVunqhi2b9+u3mfmzJmqGuK+++6zmO18iG+//VZlaMu5+OGHH1Tlz3PPPZdhnx49eliaNWumztnatWsttWvXtgwZMsRiRI44J670GRk1apQlODjY8vfff1vOnj2bdrt27VraPo899pilSpUqlpUrV1q2bNliCQ8PVzfdjRs3LA0bNrR069ZN/c7Lli1Tv++4cePS9jl69KilWLFilhdffFFl/n/xxRcWLy8vta87ng/5fMjn69ChQ5Zdu3ZZnnnmGVUhs3z5covZzoeQ31P+no0cOdJSp06dtL+DenWLVIhUqFDBMnz4cFVtNnv2bPV5mTp1qsVoRjnonMyYMcMya9Ys9fdFbm+//bb6jMi/P87A4CMXevla5tv999+vtn/yySeWsLAwVQYlH4xXX301Q2mXOHjwoLrYlC9fXn34GzdunKH0duvWrZY2bdqoD5+/v7/llltusbzzzjuWhIQEixnPh5S7yT8Kso8EFR9++KElNTU1wz6XLl1SwUbx4sVVOeGDDz6oLvJG5Ihz4kqfkezOhdymT5+ets/169ctjz/+uCqFlL8T/fv3V//YWouMjLT07NnTEhAQYClbtqzl+eeftyQnJ2c5902bNrX4+vpaatSokeH/4W7nY9KkSZaaNWuqz4cEr506dVIXKrOej1tvvTXb95FyUt2OHTssERERFj8/P0ulSpUs7777rsWI4KBzIsGH/NshPy//rrZu3TpD+a6jech/nDPmQkRERO6IOR9ERETkUAw+iIiIyKEYfBAREZFDMfggIiIih2LwQURERA7F4IOIiIgcisEHERERORSDDyIiInIoBh9ERETkUAw+iIiIyKEYfBAREZFDMfggIiIiONL/A9Ruk3UZgcYcAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "# 定义 x, y 的取值\n",
    "x = df[\"Year\"]\n",
    "y = df[\"Values\"]\n",
    "# 绘图\n",
    "plt.plot(x, y, \"r\")\n",
    "plt.scatter(x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 首先划分 dateframe 为训练集和测试集\n",
    "train_df = df[: int(len(df) * 0.7)]\n",
    "test_df = df[int(len(df) * 0.7) :]\n",
    "\n",
    "# 定义训练和测试使用的自变量和因变量\n",
    "X_train = train_df[\"Year\"].values\n",
    "y_train = train_df[\"Values\"].values\n",
    "\n",
    "X_test = test_df[\"Year\"].values\n",
    "y_test = test_df[\"Values\"].values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 线性回归预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[81.83437635],\n",
       "       [83.09935437],\n",
       "       [84.36433239],\n",
       "       [85.62931041],\n",
       "       [86.89428843],\n",
       "       [88.15926645],\n",
       "       [89.42424447],\n",
       "       [90.68922249],\n",
       "       [91.95420051],\n",
       "       [93.21917853],\n",
       "       [94.48415655]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 建立线性回归模型\n",
    "from sklearn.linear_model import LinearRegression\n",
    "model = LinearRegression()\n",
    "model.fit(X_train.reshape(len(X_train), 1), y_train.reshape(len(y_train), 1))\n",
    "results = model.predict(X_test.reshape(len(X_test), 1))\n",
    "results  # 线性回归模型在测试集上的预测结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "线性回归平均绝对误差:  6.011979515629853\n",
      "线性回归均方误差:  43.53185829515393\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import mean_absolute_error\n",
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "print(\"线性回归平均绝对误差: \", mean_absolute_error(y_test, results.flatten()))\n",
    "print(\"线性回归均方误差: \", mean_squared_error(y_test, results.flatten()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2次多项式回归预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([71.98010746, 70.78151826, 69.38584368, 67.79308372, 66.00323838,\n",
       "       64.01630767, 61.83229158, 59.45119011, 56.87300326, 54.09773104,\n",
       "       51.12537344])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "# 2 次多项式回归特征矩阵\n",
    "poly_features_2 = PolynomialFeatures(degree=2, include_bias=False)\n",
    "poly_X_train_2 = poly_features_2.fit_transform(X_train.reshape(len(X_train), 1))\n",
    "poly_X_test_2 = poly_features_2.fit_transform(X_test.reshape(len(X_test), 1))\n",
    "\n",
    "# 2 次多项式回归模型训练与预测\n",
    "model = LinearRegression()\n",
    "model.fit(poly_X_train_2, y_train.reshape(len(X_train), 1))  # 训练模型\n",
    "\n",
    "results_2 = model.predict(poly_X_test_2)  # 预测结果\n",
    "\n",
    "results_2.flatten()  # 打印扁平化后的预测结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2 次多项式回归平均绝对误差:  19.79207082954649\n",
      "2 次多项式均方误差:  464.3290384745864\n"
     ]
    }
   ],
   "source": [
    "print(\"2 次多项式回归平均绝对误差: \", mean_absolute_error(y_test, results_2.flatten()))\n",
    "print(\"2 次多项式均方误差: \", mean_squared_error(y_test, results_2.flatten()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 多项式回顾预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3 次多项式回归平均绝对误差:  4.547691414650137\n",
      "3 次多项式均方误差:  29.93305220364425\n",
      "---\n",
      "4 次多项式回归平均绝对误差:  4.426426085366537\n",
      "4 次多项式均方误差:  29.050774513159652\n",
      "---\n",
      "5 次多项式回归平均绝对误差:  4.34161548610515\n",
      "5 次多项式均方误差:  28.22191872438411\n",
      "---\n"
     ]
    }
   ],
   "source": [
    "from sklearn.pipeline import make_pipeline # type: ignore\n",
    "\n",
    "X_train = X_train.reshape(len(X_train), 1)\n",
    "X_test = X_test.reshape(len(X_test), 1)\n",
    "y_train = y_train.reshape(len(y_train), 1)\n",
    "\n",
    "for m in [3, 4, 5]:\n",
    "    model = make_pipeline(PolynomialFeatures(m, include_bias=False), LinearRegression())\n",
    "    model.fit(X_train, y_train)\n",
    "    pre_y = model.predict(X_test)\n",
    "    print(\"{} 次多项式回归平均绝对误差: \".format(m), mean_absolute_error(y_test, pre_y.flatten()))\n",
    "    print(\"{} 次多项式均方误差: \".format(m), mean_squared_error(y_test, pre_y.flatten()))\n",
    "    print(\"---\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MSE 计算结果:  [43.53185829515393, 464.3290384745864, 29.93305220364425, 29.050774513159652, 28.22191872438411, 27.44082166717476, 26.71232004773834, 26.038729581722613, 25.422418032301838, 24.865818415954422]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'MSE')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHHCAYAAABZbpmkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAARRBJREFUeJzt3Ql4VNXdx/F/NgKBJGySgBB2RWRR0Qpa6wKCira+oj5aRVSqfXGpiitWseKCYl2qAiouaNVSaYsW6sYLilZxQUQRFNlkD4tAAoHs933+Z7hhZjIhCzNz79z7/TzPkFluZs7MXGZ+Oed/zk2yLMsSAAAAj0p2ugEAAACxRNgBAACeRtgBAACeRtgBAACeRtgBAACeRtgBAACeRtgBAACeRtgBAACeRtgBAACeRtiBbz3yyCPSpUsXSUlJkaOOOkrc4MMPP5SkpCTzEwHvvvuueX8aN25sXpudO3fG7bFPOeUUc/KCqVOnmtfvp59+qvfvXn755dKpU6eYtCvR8X82MRB2UO8PSz3997//rXa7HnmkQ4cO5vazzz475Lbdu3fLPffcI7169ZKmTZtKq1atzBfYDTfcIBs3bqza7k9/+lPVY0Q65efnR+W5vP/++3LbbbfJiSeeKC+99JI8+OCDUblfRNfPP/8sF154oTRp0kQmTpwof/3rX83+AwD1kVqvrQER8xf266+/Lr/85S9Drp83b56sX79e0tPTQ64vKyuTX/3qV/LDDz/IiBEj5PrrrzfhZ8mSJeZ+/ud//kfatWsX8juTJ0+WZs2aVXvs5s2bR+U5zJ07V5KTk+WFF16QRo0aReU+EX1ffvml7Nq1S+677z4ZNGiQ081JaMOHD5eLLrqo2v9PHBz9bNu7dy+fIy5H2EG9nXXWWTJ9+nR58sknJTV1/y6kwaVfv36ybdu2kO3ffPNN+frrr+W1116T3/72tyG3FRcXS2lpabXHOP/886V169Yxew5btmwxvQV8QAVUVlaa90GDrJvo+xTNkOtnOlyrp3jS3l79P67/1+KhqKgo7j1/+keT2/7foDqGsVBvF198sRlemD17dtV1+kX5j3/8o1qYUStXrjQ/dcgonH5IZGVlRa1t5eXlphega9eu5i9YrTO48847paSkpGobHQ7ToSv9YLSHx3SIriZas6HDb99++62cfPLJkpGRId26dTPP1+7ROv74480H+uGHHy7/93//V6e2ai/Yueeeaz6c27RpIzfddFNIO4N9/vnncsYZZ0h2drZ5fG3HJ598Um07rRs49thjzeuqr8Gzzz5bNTQYTC9fd911JoAeeeSR5rXS2hi1YcMGufLKKyUnJ8dcr7e/+OKL1R5L26pDk/pa6HY6hKlDgzU9h3AamDUc6+umwfbSSy81jx38umtPoDruuONMm7V2pCb289QeRB360v1Kh0t1qFS/cOu7n4TT3kh9r/T+Ir2XGiTGjx8fMuSr79Ho0aPlkEMOMb+rvZhbt26t9vuTJk2qeh+0l/Paa6+tVpt0sPthpJqdt956S4YOHWoeUx9bXw99XSoqKqQh9HXUIez33nvP7IfaFt0HlT6fG2+80ewn+lja9ocfftgE7WD62aK9UPr+acjVfeCbb76p9v9U9wXt/dXPF/0DLDMzUy655BJzm97nE088YV5T/b+g+/Lvf/972bFjR8hjLViwQIYMGWL2P21r586dzb4fbNq0aWY/1fvXNvXu3Vv+8pe/1FqzU9v+Hfwc9Hr9LNDzuq/ccsstDX4PUAMLqKOXXnrJ0l3myy+/tE444QRr+PDhVbe9+eabVnJysrVhwwarY8eO1tChQ6tue/31183vjRs3zqqsrDzgY9xzzz1m22XLlllbt24NOe3YsaPWNo4YMcL8/vnnn29NnDjRuuyyy8zlc889t2qbv/71r9ZJJ51kpaenm/N6WrlyZY33efLJJ1vt2rWzOnToYN16663WU089ZfXs2dNKSUmxpk2bZuXm5lp/+tOfrCeeeMI69NBDrezsbKuwsPCA7dyzZ4912GGHWY0bN7Zuu+0287v9+vWz+vTpY9r7wQcfVG07Z84cq1GjRtaAAQOsRx991Hr88cfNdnrd559/XrXdwoULzXPq1KmT9dBDD1kPPPCAaXffvn3NfQbTy0cccYR1yCGHWPfee695rb7++msrPz/fat++vXmu+n5NnjzZ+vWvf22218e1VVRUWIMHD7YyMjKsG2+80Xr22Wet6667zkpNTbV+85vf1HlfOu6448z93nHHHVaTJk1M2+33+f3337euvvrqqn1H36dPP/201n2nd+/e1jnnnGM9/fTT1qWXXmquC95X67qf2O+9nmyXXHKJlZOTY5WXl4dsN2HCBCspKclas2ZNyPM7+uijrdNOO83sMzfffLPZZy688MKI7R40aJDZTl9H3U5fm9LS0qjth3abVq9eXXWdPl9tzyOPPGLe6wsuuMBsc8stt1R7vfT/dW10m27dulktWrQw7+kzzzxj9uWioiKzz7Zq1cq68847zfX6mutrdsMNN4TsV7qf63PS10Hfw9NPP71qH9bnENwm3d+7du1qzut9vvLKK+a23/3ud2ZfvOqqq8z1t99+u9W0adOQ13Tz5s2mnfr/UJ//lClTrD/+8Y/m/4VN90F93IEDB5r9RE/aLn2dbPr8wv/P1mX/tp+DfgYceeSR1pVXXmneg2HDhpnfnTRpUq2vN+qOsIMGhR39EMrMzDRf2kr/85966qnmfHjY0W0OP/xw87t62+WXX2698MIL5sMmnP3BH+mk93EgixYtMtvpB10w/eDW6+fOnRvyIaMffnWhXzL6+xrabD/88IO5TgPeZ599VnX9e++9V+1DORL9QtLt3njjjarr9AtBvyiCPzg1HHbv3t0aMmRISFDU17Rz587mi8CmX/AaPjRw2pYvX24+9COFHW37kiVLQq4fOXKk1bZtW2vbtm0h11900UXmy9N+vzV46O9//PHHIdvpF4ve9yeffFLjc9cvmzZt2li9evWy9u7dW3X9rFmzzO+OHTs24j5XG3vf0XAW7JprrjHXf/PNN/XeT8LDjv3+vvPOOyG/q1/kwdvZ7dYAE/y+3XTTTeaLfOfOnebyli1bTGjV4Khf9Db9/6W//+KLL0ZtP4wUduz3M9jvf/97sx8VFxc3KOzoY7z77rsh1993333m/9uPP/4Ycr2GAH091q5day7/85//NL+v/z9s+rpoYIwUdvQ6vY9guk/q9a+99lrI9dqm4OtnzJhR676lQSwrK6tauA0WHnbqs3/bz0HDfDANyfrHD6KHYSw0iA4TaFHerFmzTAGp/ow0hKW0G1eHYW699VZzWbuiR44cKW3btjXFypGGDv75z3+aYbLgkw49Hcjbb79tfuqwQbCbb77Z/PzPf/7T4Oer3cta3GnTYQLtYj/iiCPM0IHNPr9q1apa26rPX2uTbDoscfXVV4dst2jRIlm+fLl5bbV7X+uh9KRDcAMHDpSPPvrIdNlrl7cOW2hXeHCxtw4VnHnmmRHboEMhPXv2rLqsGUhf93POOcectx9LT9rVX1BQIAsXLqzqotfn3qNHj5DtTjvtNHP7Bx98UONz16EDrcW55pprQmoddDhF7+9g3ielQ0DBdB8L3j8OZj/RIml9fXX4z/bdd9+ZoSUdpgin72fwEOJJJ51k3qs1a9aYy/qe6RCwDu9o7YftqquuMkMm4W2J9n4YXEuj/4/1PdQ27tmzxwwHNoQOBen+Ekz3F73fFi1ahOwv+nrq66H7sdKh1LS0NPP8bfq6hL+nwUaNGlXtsXS49/TTTw95LB1S0tfP3jftOjD97NJJFJHoNvp/LXjIvjYN2b//93//N+Syvla1vXeoHwqU0SA6rqwfVFqUrB+M+oEV/MUdTj98JkyYYE76QT9nzhz585//LE8//bS57f777682w6G+Bcp6v/rBqF/wwXJzc82Hlv0F0xDt27evVvei7db6g/DrVHhtQKS2ajvD71O/vIJp0FF27UokGkK0JkXDZ/hzV5Gus7+UgmktidZVPPfcc+Z0oIJhbdf3339v9oMDbReJ/T6EP1elXwaRljWoj+7du4dc1joU3S/sWpWD2U/097QuRGcL6n6vAVWDj36pXXDBBdW2z8vLC7msX/bB+0dNr4UWzusaUOFtifZ+qDMi77rrLjM7sbCwsNp+1RDh+5W9v2ggrG1/0eerfwTo61qXfVgnSOhrEv5Y2natgzvQY2nYHzZsmNx7773y+OOPm5oo/WNB/7CwZ6xpYHnjjTfMHwyHHnqoDB482Pyhp/Vz0dq/dd8Jf110P6ntvUP9EHbQYPqhoH+B6do3+mFQ1xkzHTt2NEWAWqypH+j6ZREedg5G+JdBNNQ0i6Wm6wMjRQfPLt7UBRBrWvhQ/1oNL8Cti/AZMvZjaQ9FTeGqT58+VdtqoeZjjz0WcbvwL18n1bQ/NHQ/ueyyy8z7obMMtVhfA78W5doBI5b7RzT3Qw22+oWvPUjjxo0zoVC/eLX37vbbb69WOFxXkWZe6X1pT4sWsEdy2GGHNeixNJQE94jZj6VBJ7j3LZgdLPT91+Luzz77TGbOnGmKqvVz6dFHHzXX6f8rvR/tXdXb3nnnHXPSHmbdB15++WWJhnjPkPMrwg4aTMOKznDQD4a///3v9f59/etFP2B1GCAaNETpB53+Zafd+rbNmzebD3a93S20Lfq89cso+Et32bJlIdvp66P0C+lA68zoh7J+Ua1YsaLabZGuq+lLQGecaC9dbWvaaLt0howOpdU3NNjvgz5Xe9jLptcd7Puk739w74I+f90v7BWAD3Y/0RlRRx99tPky1V6FtWvXylNPPdWgtga/Fhr8bTq0tXr16piuLaSzh3Ro9F//+pfpSbXp40ab7i86m62256Ovhw4z2b1m9d2H7cfS4UGd/VmXKe/9+/c3pwceeMAEV+250xlYv/vd76p62XRoV0+632hvj84wu/vuuyP2OMV6/0bDULODBtO/fLQ7X6f86gdBTfRLMXztHbu7d+nSpRG7extCp58qnXIazO590DFzt9C26srR9rRhpR/w4cNHWmegH9465KdfFuHsacz616F+kWhvQ/CK1PoloX+N1oXeh3bra91OpAAaPGVau/J1uuyUKVOqbafDaVrnUBOdkqzh7Jlnngmp19J26tDYwb5PutJyMDuI2LVL0dhPdGq0rsKt96HT22uqi6qNvmf6ZaprVgX3wuhilzoUE8t91u5RCH5cDVk6DT7adH+ZP3++6SEJpwFTlwJQWuuj9TPB+5UGjPD3tLbH0sCuU+jD6ePYU/p1mCi858vuPbX3Sw2DwbQXye7drGmZgljv32gYenZwUA5US2LT4j5dj+XXv/61+QtKQ5IW3+naLfphoGEpnIaASCsoa1e4rpkRSd++fU17NDDYXfRffPGF6W7WsfhTTz1V3EKH/7ReSbvDv/rqK1OnoIdCCK9V0A/X559/3nyZ6pohV1xxhakd0KChfwFrj492wSt9HfULWP+i1aJN/cDXx9CeCO2Kr4uHHnrI3K8WuGobtYB5+/btZmhD/1rW8/aXvdYyaGGlbq+PqY+nRa16vb3OSiRagKrrq+hz0fdIh4K0V0XXLtHeF11v6GBoz4Tua1pXoV+wr776qhly1f0jWvuJ3p8OycyYMcO81vqcGkJ708aMGWPqRrS92m79618Dh64tFKnoOVpOOOEE07uqr8Uf/vAH00On+2C0hmCD6eSEf//732a4T9eW0RCvgXjx4sXm/7rWU2mNnr7+v/jFL0yxuAZ1rXHR37P3u7r0Iur7qT3OuuaR7vdaZ6Pvj/bkafGy7mdaX6jvt77O2kOtf1BogbaGLP0/ZQdi7d3Rx9YeGu3F0z/QNDxrKAruFYzn/o0GiuLMLnhcXacBh089X7VqlZlu2b9/fzMlU6dC6/ouuk3wNN/app6Hr2URSVlZmVk3Rqdlp6WlmTVJxowZEzKNtiFTz3UdjNqep03bee2119Z6v7omi06T1mm+rVu3NtNc7emx4c9T18A577zzzDoluraIPrauj6Jr8ATTyzptVacz6/ojzz//vFnfRdfyqGsbdUkAvU1fO30Ndf0WXWfkueeeC9lOp9g+/PDD5rXRNumaJTpdVl//goKCWp//3//+d9NW/d2WLVuaNWzWr18fsk1Dpp4vXbrUrJ+jSyNom3RdlOApwPXZT8Knngc766yzzONFWvunpnZHWpPFnmreo0cP0xZdx2fUqFHV1pU62P0w0tRzXSJA/1/qGjC6ho+u+WRPWw9uY32mnkdqi9q1a5d5jXV5Bd0/dZ/X9br+/Oc/h6wnpGtq/fa3vzXvny53oEtVaDu1TbqeUF3/D+v+qvujPje9L11/SZ/fxo0bq9aluvjii628vDyzD+pn09lnn20tWLCg6j7+8Y9/mGUB9DZts26rU/M3bdpU63tal/27pudg78uIniT9p6FBCYD76V/LOuvGntnlVdqzpT0kOtwWy0ON2LRHQHsm6lNPgobR4Vl9vXUmU6SV2IHaULMDeIjWywTTgKPryui0WkTPpk2bzHopOpyH2O7DOjyqQ0c6vHTMMcc41i4kNmp2AA/RGT1aE2Gv0aIF5FoAW9OUX9S/HkiPd6V1VFqbobUhiC5dBFIDz4ABA0xNn84W+/TTT+XBBx+M2wFF4T2EHcBDtMj1b3/7m1n7SNcg0S8M/ZIIX2gPDaMH29TCU10sUAtcdSFCRJcWA+taN7qysa4fpdO7tWdHD1wLNBQ1OwAAwNOo2QEAAJ5G2AEAAJ5Gzc6+FTp11VldKj8Wx1UCAADRp5U4uiBku3btqh0nLRhhR8QEHTcduBAAANTdunXrzCrXNSHsiJgeHfvF0rUcAACA+xUWFprOCvt7vCaEnaDjrWjQIewAAJBYaitBoUAZAAB4GmEHAAB4GmEHAAB4GmEHAAB4GmEHAAB4GmEHAAB4GmEHAAB4GmEHAAB4GmEHAAB4Giso44AqKi35YvV22bKrWNpkNpZfdG4pKckcLBUAkDgIO6jRu99tkntnLpVNBcVV17XNbiz3nNNTzujV1tG2AQBQVwxjocagM+rVhSFBR+UXFJvr9XYAABIBYQcRh660R8eyr7AsaVIaCD32dXq7bgcAgNsRdlCN1ugE9+jcPfd5+eYvF0mPLavNZY04ertuBwCA2xF2UI0WIwc7ZdUCaVRZLies+faA2wEA4EaEHVSjs65saRVl0nFHoD6ny/b1NW4HAIBbEXZQjU4v11lXOsE8b0e+pFqV5vrOOzaYn3q93q7bAQDgdoQdVKPr6Oj0ctVt+7qq67v8vMEEHaW3s94OACAREHYQka6jM/nSY6Tvns1V17Xd/bN0bmyZ61lnBwCQKFhUEDXSQFOZUx5y3exz2kkKQQcAkEDo2cEBJS/7IeRyyvIfHWsLAAANQdhBzSxL5Id9YecXvwj8/JGwAwBILIQd1GzzZpGCApHkZJGhQwPXLVvmdKsAAKgXwg5qZvfqdO4s0qdP4DxhBwCQYAg7qD3s9Oghcthh+4exdHgLAIAEQdhB3cJO166B4axdu0Ty851uGQAAdUbYQc3sISsNO+npIp06hV4PAEACIOygbj076vDDAz+ZkQUASCCEHUS2Z4/ImjWRww49OwCABELYQWTLlwcKkVu2FGndOnBdcJEyAAAJgrCDug1hKXp2AAAJiLCD+oedVatESkudaRcAAPVE2EHdw067diJNm4pUVIisXu1Y0wAAqA/CDmqfdm5LStpft8NQFgAgQRB2UF1lZeSwowg7AIAEQ9hBdevXB6aep6UFjosVjLV2AAAJhrCDmut1unUTSU0NvY0ZWQCABEPYQd2Kk22stQMASDCEHTQs7GzeLFJQEN92AQDQAIQd1C/sZGWJ5OYGzjOUBQBIAIQd1C/sKIqUAQAJhLCDUIWFIps2hYaacBQpAwASCGEHoewA07atSHZ25G0oUgYAJBDCDiIPYdXUqxN8Gz07AIAEQNhB/ep1wmt2dLVlAABcjLCD+oedTp0Ciw3u3SuyYUPcmgYAQEMQdlD/sKOHkejaNXCeoSwAgMsRdrBfebnI8uW1hx3FAUEBAAmCsIP9fvpJpKxMpEkTkQ4dDrwta+0AABIEYQeRZ2Il17JrMCMLAJAgCDuoX72OjbV2AAAJgrCD+q2xY7O30aGv4uLYtgsAgINA2EHDenbatAmssGxZIitWxLxpAAA0FGEHDQs7SUkMZQEAEgJhBwHbton8/HPgvB1iakORMgAgARB2EBpYOnYUycio2+/QswMASACEHdR/CMtGzw4AIAEQdhBA2AEAeBRhB/Wfdm7r1i3wc/v2/fU+AAC4jGvCzkMPPSRJSUly4403Vl1XXFws1157rbRq1UqaNWsmw4YNk82bN4f83tq1a2Xo0KGSkZEhbdq0kVtvvVXK9RhPiH3PTtOm+w8rQe8OAMClXBF2vvzyS3n22WelT58+IdffdNNNMnPmTJk+fbrMmzdPNm7cKOedd17V7RUVFSbolJaWyqeffiovv/yyTJ06VcaOHevAs0hgJSUiq1bVP+wohrIAAC7neNjZvXu3XHLJJTJlyhRp0aJF1fUFBQXywgsvyGOPPSannXaa9OvXT1566SUTaj777DOzzfvvvy9Lly6VV199VY466ig588wz5b777pOJEyeaAIQ60kUBKytFsrJEcnPr97vMyAIAuJzjYUeHqbR3ZtCgQSHXf/XVV1JWVhZyfY8ePSQvL0/mz59vLuvP3r17S05OTtU2Q4YMkcLCQlmyZEmNj1lSUmK2CT75WvAQli4WWB/07AAAXC7VyQefNm2aLFy40AxjhcvPz5dGjRpJ8+bNQ67XYKO32dsEBx37dvu2mowfP17uvffeKD0LD7CDSn2HsBQ9OwAAl3OsZ2fdunVyww03yGuvvSaNGzeO62OPGTPGDJPZJ22LrzWkODm8Z0eHwioqotsuAAASOezoMNWWLVvkmGOOkdTUVHPSIuQnn3zSnNceGq272blzZ8jv6Wys3H11JfozfHaWfdneJpL09HTJysoKOfnawYSdvDx9QQNFzmvWRL1pAAAkbNgZOHCgLF68WBYtWlR1OvbYY02xsn0+LS1N5syZU/U7y5YtM1PNBwwYYC7rT70PDU222bNnm/DSs2dPR55XwtGjljdkjR1bSsr+9XYYygIAuJBjNTuZmZnSq1evkOuaNm1q1tSxrx85cqSMHj1aWrZsaQLM9ddfbwJO//79ze2DBw82oWb48OEyYcIEU6dz1113maJn7b1BHWzaJLJrVyC0dO3asPvQkKQF4Vr7c8YZ0W4hAACJW6Bcm8cff1ySk5PNYoI6g0pnWk2aNKnq9pSUFJk1a5aMGjXKhCANSyNGjJBx48Y52u6EYvfqdOkSGI5qCIqUAQAu5qqw8+GHH4Zc1sJlXTNHTzXp2LGjvP3223FonUcdTL2OjennAAAXc3ydHSTwtHMbYQcA4GKEHb+LRs+OPYy1fr1IUVF02gUAQJQQdvwuGmGnVavASS1fHp12AQAQJYQdP9NemLVrGz7tPBhDWQAAlyLs+Jk9e6p16/09Mw3FjCwAgEsRdvwsGkNYNnp2AAAuRdjxs2iGHXp2AAAuRdjxs1j17OghKAAAcAnCjp9FY40dmx4fKylJpLBQj8Z68PcHAECUEHb8qrIyumFHDzXRqVPgPENZAAAXIez4lU45Ly4WadRof0g5WBQpAwBciLDj93qd7t0DRzyPBsIOAMCFCDt+Fc3iZBszsgAALkTY8atYhB16dgAALkTY8atY9uysWiVSVha9+wUA4CAQdvwqmjOxbIceKpKRIVJeLrJ6dfTuFwCAg0DY8aOdO0Xy86NzANBgycn7e3cYygIAuARhx4/sIKI9MZmZ0b1vipQBAC5D2PFzvU40e3VsFCkDAFyGsONHsShOttGzAwBwGcKOH8Uy7NCzAwBwGcKOH8WjZ0cLoPWgoAAAOIyw4ze6/s2KFbELO9nZIjk5gfMMZQEAXICw4ze6/o2ug9O0aWA2ViwwlAUAcBHCjp9nYum6OLFA2AEAuAhhx29iOe3cxowsAICLEHb8JpbFyTZ6dgAALkLY8Zt4hJ3gnh3Lit3jAABQB4QdP9HgEY+w06WLSGqqyJ49Ihs2xO5xAACoA8KOn2zdKrJjh0hSkkj37rF7nLS0QOBRDGUBABxG2PETO3h06iTSpElsH4siZQCASxB2/CQeQ1g2ipQBAC5B2PETJ8IOPTsAAIcRdvwkHmvshA9j0bMDAHAYYcdPnOjZ+eknkZKS2D8eAAA1IOz4RXFx4LhY8Qo7ejDQzEyRykqRlStj/3gAANSAsOMXy5cH1tlp3lykTZvYP55Ob6dIGQDgAoQdPw5haRCJB8IOAMAFCDt+YQeOeAxh2VhrBwDgAoQdv4hncbKNnh0AgAsQdvwintPObfTsAABcgLDjB/E6AGhNYWfbNpHt2+P3uAAABCHs+IEeebyoKHAk8q5d4/e4TZuKtG8fOM9QFgDAIYQdP7B7dTTo6BHJ44mhLACAwwg7fuDEEJaNImUAgMMIO37gxLRzGwcEBQA4jLDjB0727HBAUACAwwg7fuDEtHOb/Zh6uIqKivg/PgDA9wg7Xrdrl8j69c6FnY4dRRo1Chz5fN26+D8+AMD3CDteZ9fK6ME/W7aM/+OnpIh06xY4z1AWAMABhB2vc7Jex8aMLACAgwg7XueGsMNaOwAABxF2vM4NYYeeHQCAgwg7XufkGjs21toBADiIsONlOtXbDhhuGMZau1Zkzx7n2gEA8CXCjpetWROY8p2eLpKX51w7WrfePxNM19sBACCOCDt+qNfRnhWdAu4kipQBAA4h7HiZG4qTbRQpAwAcQtjxMjeGHXp2AABxRtjxMjeFHQ4ICgBwCGHHy9ww7TzSMJZlOd0aAICPEHa8avt2kS1bQntVnNS1q0hSkkhBgcjWrU63BgDgI4Qdr/fqtG8v0qyZ060RadIkcAR0xVAWACCOCDte5aZ6HRszsgAADiDseJUbww5r7QAA/BZ2Jk+eLH369JGsrCxzGjBggLzzzjtVtxcXF8u1114rrVq1kmbNmsmwYcNk8+bNIfexdu1aGTp0qGRkZEibNm3k1ltvlfLycgeejcu4MezQswMA8FvYad++vTz00EPy1VdfyYIFC+S0006T3/zmN7JkyRJz+0033SQzZ86U6dOny7x582Tjxo1y3nnnVf1+RUWFCTqlpaXy6aefyssvvyxTp06VsWPHOvisXMLNYYeeHQBAHCVZlrvmAbds2VIeeeQROf/88+WQQw6R119/3ZxXP/zwgxxxxBEyf/586d+/v+kFOvvss00IysnJMds888wzcvvtt8vWrVulUaNGdXrMwsJCyc7OloKCAtPDlPDKykQyMkS0h2v9epFDDxVX0AOBapFyWlrggKCpqU63CACQwOr6/e2amh3tpZk2bZoUFRWZ4Szt7SkrK5NBgwZVbdOjRw/Jy8szYUfpz969e1cFHTVkyBDz5O3eIV9auTIQdHQWVrt24ho6M0xnZWkYW73a6dYAAHzC8T+tFy9ebMKN1udoXc6MGTOkZ8+esmjRItMz07x585DtNdjk5+eb8/ozOOjYt9u31aSkpMScbBqOPDuEpWvbuEVyskj37iLffhsYytLzAADEmOM9O4cffrgJNp9//rmMGjVKRowYIUuXLo3pY44fP950e9mnDh06iCfDjl0j4yYUKQMA/BZ2tPemW7du0q9fPxNC+vbtK3/5y18kNzfXFB7v3LkzZHudjaW3Kf0ZPjvLvmxvE8mYMWPM+J59WrdunXiKG4uTbYQdAIDfwk64yspKM8Sk4SctLU3mzJlTdduyZcvMVHMd9lL6U4fBttiHRRCR2bNnmyIlHQqrSXp6etV0d/vkKW4OO6y1AwDwU82O9rCceeaZpuh4165dZubVhx9+KO+9954ZXho5cqSMHj3azNDSQHL99debgKMzsdTgwYNNqBk+fLhMmDDB1OncddddZm0eDTS+pJPr3Bx26NkBAPgp7GiPzGWXXSabNm0y4UYXGNSgc/rpp5vbH3/8cUlOTjaLCWpvj860mjRpUtXvp6SkyKxZs0ytj4agpk2bmpqfcePGiW/pMJ4ebFOLgbt1E9f27GzaJLJrl0hmptMtAgB4nOvW2XGCp9bZmTdP5JRTAkcZX7FCXElnzOnQ44IFIv36Od0aAECCSrh1dhAlbh7CsjGUBQCII8KO17h52rmNImUAQBwRdryGnh0AAEIQdrwmkcIOPTsAgDgg7HiJHlxzzRr3h53gYSzq4wEAMUbY8ZLlywPhoWVLkdatxbW6dNF1A0R27xbZuNHp1gAAPI6w4yV2DYzbDgAarlEjkc6dA+cZygIAxBhhx0sSoV7HRpEyACBOCDtekgjTzm2EHQBAnBB2vCSRenZYawcAECeEHa+orAyt2XE7enYAAHFC2PGK9esDU8/T0vYX/yZC2Fm9WqS01OnWAAA8jLDjtSEsPdK5Bh63y80VadYs0CO1cqXTrQEAeBhhxysSqV5H6dR4hrIAAHFA2PGKRKrXsVGkDACIA8KOVyRaz46iZwcAEAeEHa9IpDV2bBwQFAAQB4QdLygs3H+MqUQKO/YwFj07AIAYIux4gR0WdIZT8+aScGFn61aRHTucbg0AwKMIO16QiPU6SqeeH3po4DxDWQCAGCHseEGihh3FUBYAIMYIO16QiNPObczIAgDEGGHHC7zQs8MwFgAgRgg7ia68XGT58sSbiWWjZwcAEGOEnUT300+BA2k2biySlycJG3Y0sOlxsgAAcDLsTJgwQfbu3Vt1+ZNPPpGSkpKqy7t27ZJrrrkmui1E3RcTTE7A7NqxY+DApcXFIuvWOd0aAIAH1evbccyYMSbQ2M4880zZsGFD1eU9e/bIs88+G90Wwrv1Oio1NXCkdsVQFgDA6bBjWdYBL8MBiR52FEXKAIAYSsBxD3gu7FCkDACIIcJOokvkNXZsHBAUABBDqfX9heeff16a6TL/ZtZzuUydOlVat25tLgfX8yAOtm0LnIKHghIRqygDAGIoyapH4U2nTp0kKSmp1u1Wr14tiaSwsFCys7OloKBAsrKyJGF88onIL38ZmHK+Zo0kLD0QaJs2IrpvFRWJNGnidIsAAB76/q5Xz85PuqYL3MML9TpKewZbtAgc+XzFCpHevZ1uEQDAQ6jZSWReCTvao8NQFgAgRuoVdubPny+zZs0Kue6VV16Rzp07S5s2beTqq68OWWQQMeaVsKOYkQUAcEPYGTdunCxZsqTq8uLFi2XkyJEyaNAgueOOO2TmzJkyfvz4WLQTXg87rLUDAHBD2Fm0aJEMHDiw6vK0adPk+OOPlylTpsjo0aPlySeflDfeeCMW7UQ47UGzC8G9EHbo2QEAuCHs7NixQ3Jycqouz5s3zxwywnbcccfJOo5vFB8rV4pUVIho9Xlurngq7LAyNwDAqbCjQceeVl5aWioLFy6U/v37V92u6+yk6UEdEd8DgNZhOQDX0+Nj6fPYuXP/2kEAAMQ77Jx11lmmNufjjz82BwXNyMiQk046qer2b7/9Vrp27RqNdsFP9TpK19bR9YIUQ1kAAKfCzn333Sepqaly8sknmzqd5557Tho1alR1+4svviiDBw+OZvvgl7CjOGwEACAG6rWooB4W4qOPPjIrFeohI1JSUkJunz59umRmZka7jfBL2NEZWe+/T88OAMC5sHPllVfWaTvt4UEMaQGvF8MOM7IAAE6HHT3oZ8eOHeXoo4+WehxSC9G2aZNWg4toz5qXaqRYawcA4HTYGTVqlPztb38zM7KuuOIKufTSS6Vly5axaBcOxO756NJFJD1dPNezo8fHKi8XSa3X7gkAwMEXKE+cOFE2bdokt912m1ktuUOHDnLhhRfKe++9R0+PU9POvaRDB5HGjUXKyhL7KO4AgMQ+EGh6erpcfPHFMnv2bFm6dKkceeSRcs0110inTp1k9+7dsWklQnmxXkclJ4t07x44T90OAMANRz1PTk6WpKQk06tToav5Ij68GnYURcoAAKfDjh7VXOt2Tj/9dDnssMPMwUCffvppWbt2rZmOjjjwQ9ihSBkAECX1qgDV4So9+KfW6ug0dA09uvYO4qioSGTtWu+GHXtGFj07AAAnws4zzzwjeXl50qVLF3MQUD1F8q9//Sta7UM4u8dDQ2arVuI59OwAAJwMO5dddpmp0YGD7B4PL/bqBPfsbNggogXvDI0CAOK9qCAc5uV6HdWihcghh4hs3Rro3TnmGKdbBADw82wsOMCra+wEYygLABBFhJ1E4/WeHUWRMgAgigg7iaSy0vs1O4q1dgAAUUTYSSQ65by4WKRRI5FOncSzOCAoACCKCDuJOISlh1Tw8kEyg3t2OOYaAOAgEXYSiR/qdVTXroHjZOnU8/x8p1sDAEhwhJ1E4od6HaXDdJ07B85TtwMAOEiEnUTih2nnNoqUAQBRQthJJH4ZxlKstQMAiBLCTqLYuXN//YofenZYawcAECWEnURhf+m3ayeSlSWeR88OACBKCDuJwk9DWME9O6tWiZSWOt0aAEACI+wkCr+FHe3B0iOeV1QEAg8AAIkYdsaPHy/HHXecZGZmSps2beTcc8+VZWE1GsXFxXLttddKq1atpFmzZjJs2DDZvHlzyDZr166VoUOHSkZGhrmfW2+9VcrLy8VT/DLt3JaUxErKAIDEDzvz5s0zQeazzz6T2bNnS1lZmQwePFiKioqqtrnppptk5syZMn36dLP9xo0b5bzzzqu6vaKiwgSd0tJS+fTTT+Xll1+WqVOnytixY8VT/NazoyhSBgBEg+UiW7Zs0WMDWPPmzTOXd+7caaWlpVnTp0+v2ub7778328yfP99cfvvtt63k5GQrPz+/apvJkydbWVlZVklJSZ0et6CgwNyn/nSl0lLLSkvTAydY1po1lm/cc0/gOY8c6XRLAAAuVNfvb1fV7BQUFJifLVu2ND+/+uor09szaNCgqm169OgheXl5Mn/+fHNZf/bu3VtycnKqthkyZIgUFhbKkiVLIj5OSUmJuT345GqrV4uUlYlkZIi0by++wYwsAEAUuCbsVFZWyo033ignnnii9OrVy1yXn58vjRo1kubNm4dsq8FGb7O3CQ469u32bTXVCmVnZ1edOnToIAmzcrIeM8ovGMYCAESBa745tXbnu+++k2nTpsX8scaMGWN6kezTunXrxNX8WK8THHa2bAksqggAQKKGneuuu05mzZolH3zwgbQPGqbJzc01hcc7w77odDaW3mZvEz47y75sbxMuPT1dsrKyQk6u5tewk5kp0rZt4DxDWQCARAw7lmWZoDNjxgyZO3eudLaPdL1Pv379JC0tTebMmVN1nU5N16nmAwYMMJf15+LFi2WL/vW/j87s0gDTs2dP8QS/TTsPxgFBAQAHKVUcHrp6/fXX5a233jJr7dg1NlpH06RJE/Nz5MiRMnr0aFO0rAHm+uuvNwGnf//+Zludqq6hZvjw4TJhwgRzH3fddZe5b+3BSXg6H+n77/0ddj78kJ4dAEBihp3Jkyebn6ecckrI9S+99JJcfvnl5vzjjz8uycnJZjFBnUWlM60mTZpUtW1KSooZAhs1apQJQU2bNpURI0bIuHHjxBO2bRPZsSOwyF737uI7FCkDAA5Sks4/F5/Tqefai6TFyq6r3/n4Y5Ff/UqkU6fAFHS/+c9/RM4+W6RvX5FFi5xuDQAgAb+/XVGgjAPwa3GyLfiQEZWVTrcGAJCACDtu5/ewo0XraWkie/eKrF/vdGsAAAmIsON2fg87qakiXbsGzlOkDABoAMKO2/k97CiKlAEAB4Gw42bFxSI//RQ47+eww1o7AICDQNhxsxUrAkW52dkibdqIb3FAUADAQSDsJMoQlq6z41cMYwEADgJhx82o1wnt2VmzJjC0BwBAPRB23IywE3DIIYGhPF3/Uof2AACoB8KOmxF2AnQIjyJlAEADEXbcSnsx/Hy083AUKQMAGoiw41YbN4rs3h26qJ6fUaQMAGggwo7bh7A06OjhEvyOYSwAQAMRdtweduwveb9jGAsA0ECEHbeiODlUt26Bn9u3i2zb5nRrAAAJhLDjVoSdUBkZInl5gfP07gAA6oGw41aEneooUgYANABhx4127RJZvz5wnpqd/ShSBgA0AGHHjexhGj34Z8uWTrfGPShSBgA0AGHHjVhMMDKGsQAADUDYcSOmnUdmvx56fKyKCqdbAwBIEIQdN6I4ObIOHUTS00VKSwNHQAcAoA4IO25E2IksJUWke/fAeYayAAB1RNhxGx2esQtwCTvVUaQMAKgnwo7b6PBMSUlguKZjR6db4z4UKQMA6omw49YhLP1S12EbhGKtHQBAPRF23IZp5wfGMBYAoJ4IO25DcXLdhrF0hemiIqdbAwBIAIQdt2GNnQPTFaVbtw6cX77c6dYAABIAYcdt6NmpHUXKAIB6IOy4yfbtIlu2BM7Ts1MzipQBAPVA2HET+8u7fXuRZs2cbo17UaQMAKgHwo6bMIRVNwxjAQDqgbDjJoSd+vfsWJbTrQEAuBxhx01YY6duunYVSU4WKSwU2bzZ6dYAAFyOsOMmTDuvGz2URqdOgfMMZQEAakHYcYuyMpGVKwPn6dmpHUXKAIA6Iuy4hQad8nKRpk1FDj3U6da4H0XKAIA6Iuy4sTg5Kcnp1rgfa+0AAOqIsOMWzMSqH4axAAB1RNhxC8JOw4axVq0K1DsBAFADwo5bMO28frSuKSMjUOe0erXTrQEAuBhhxw10YTymndeP1jVRpAwAqAPCjhvowT937gx8gXfv7nRrEgdFygCAOiDsuIHdq9O5s0jjxk63JnFQpAwAqAPCjhtQnNwwDGMBAOqAsOMGhJ2GoWcHAFAHhB03IOwcXM9Ofn7goKAAAERA2HEDwk7DZGWJ5OYGzjOUBQCoAWHHaXv3iqxZEzhP2Kk/hrIAALUg7Dht+fLAOjstWoi0bu10axIPRcoAgFoQdpzGAUAPDmvtAABqQdhxGvU6B4dhLABALQg7TiPsRGcYS8NOZaXTrQEAuBBhx2mEnYOjq06npors2SOycaPTrQEAuBBhx0naE8HRzg9OWppI166B89TtAAAiIOw4acOGQI+EfmFrDwUahhlZAIADIOy4YQhLeyY08KBhKFIGABwAYcdJ1OtEBz07AIADIOw4ibATHfTsAAAOgLDjJMJOdMPOTz+JlJQ43RoAgMsQdpxE2ImONm0CBwXV2W0rVjjdGgCAyxB2nFJYuH9dGLtnAg2jh9lgKAsAUAPCjlPsL+XcXJHmzZ1uTeKjSBkAUAPCjlMYwoouDggKAHBj2Pnoo4/knHPOkXbt2klSUpK8+eabIbdbliVjx46Vtm3bSpMmTWTQoEGyfPnykG22b98ul1xyiWRlZUnz5s1l5MiRsnv3bkmYsMMQVnQwjAUAcGPYKSoqkr59+8rEiRMj3j5hwgR58skn5ZlnnpHPP/9cmjZtKkOGDJHi4uKqbTToLFmyRGbPni2zZs0yAerqq68W16NnJ7oYxgIA1CDJ0u4TF9CenRkzZsi5555rLmuztMfn5ptvlltuucVcV1BQIDk5OTJ16lS56KKL5Pvvv5eePXvKl19+Kccee6zZ5t1335WzzjpL1q9fb36/LgoLCyU7O9vcv/YQxUWvXiJLloi8847IGWfE5zG9rKhIpFmzwPlt20RatXK6RQCAGKvr97dra3ZWr14t+fn5ZujKpk/o+OOPl/nz55vL+lOHruygo3T75ORk0xNUk5KSEvMCBZ/iqrxcxB6Oo2cnOpo2FenQIXCeoSwAQCKEHQ06Sntygull+zb92UbXWAmSmpoqLVu2rNomkvHjx5vgZJ862F+S8aKL35WWijRuLJKXF9/H9jKGsgAAiRR2YmnMmDGmy8s+rVu3zrni5GRfvgWxQZEyACAC137T5ur6MyKyefPmkOv1sn2b/tyyZUvI7eXl5WaGlr1NJOnp6WZsL/gUV3bPA0NY0UXPDgAgkcJO586dTWCZM2dO1XVaW6O1OAMGDDCX9efOnTvlq6++qtpm7ty5UllZaWp7XItp57HBWjsAgAhSxUG6Hs6KoGMZaVHyokWLTM1NXl6e3HjjjXL//fdL9+7dTfi5++67zQwre8bWEUccIWeccYZcddVVZnp6WVmZXHfddWamVl1nYjmCaeexDTu6T1VUiKSkON0iAIDfw86CBQvk1FNPrbo8evRo83PEiBFmevltt91m1uLRdXO0B+eXv/ylmVreWAt793nttddMwBk4cKCZhTVs2DCzNo+rEXZiQ4u909MDRz5fu1a7B51uEQDABVyzzo6T4rrOjq4Bc8ghgfO60rNOmUb01y96912RIUOcbg0AIIYSfp0dz7LrSbQXgqATfdTtAADCEHbijSGs2GJGFgAgDGEn3ph2HlustQMACEPYiTemnccWPTsAgDCEnXhjGCu27BCpq2Lv2eN0awAALkDYiSedEr1qVeA8YSc29Gjn9hHP7YOtAgB8jbATTytXBha7y8wUadvW6dZ4F0NZAIAghB2nhrCSkpxujXdRpAwACELYiSfqdeKDnh0AQBDCTjwRduKDhQUBAEEIO/HEGjvxH8biaCgA4HuEnXjRL13W2ImPrl0DNVEFBSJbtjjdGgCAwwg78ZKfr0csE0lOFunWzenWeFvjxiKdOgXOU6QMAL5H2IkXu1enSxeR9HSnW+N91O0AAPYh7MQLxcnxxYwsAMA+hJ14IezEF2vtAAD2IezEC2EnvujZAQDsQ9iJF6adO9Ozo4foKC93ujUAAAcRduJBj769Zk3gPNPO4+PQQ0UyMgJBZ/Vqp1sDAHAQYSce7LoRPRp369ZOt8YfdIp/9+6B8wxlAYCvEXbigXodZ1CkDAAg7MQJYccZrLUDACDsxAlhxxnMyAIAEHbihLDjDIaxAACEnTiorNz/ZUvYcaZnZ9OmwHHJAAC+RNiJtXXrRPbuFWnUaP/BKREf2dkiOTmB88uXO90aAIBDCDvxGsLSI52npjrdGv+hSBkAfI+wE2vU6ziLImUA8D3CTqwRdpxFkTIA+B5hJ9YIO85iGAsAfI+wE2uEHXcMY2nPjmU53RoAgAMIO7FUUCCSnx84zwFAndGli0hKikhRkcjGjU63BgDgAMJOjFRUWrJ4zhfmfGlOrlQ0y3S6Sf6UlhYIPIqhLADwJcJODLz73Sb55cNz5aUX3zGXF6S3MZf1ejiAImUA8DXCTpRpoBn16kLZVFAsXX9eb65b2aq95BcUm+sJPA6gSBkAfI2wE+Whq3tnLhW7DLbr9n1hp2X7quv0dt0OccRaOwDga4SdKPpi9XbTo2ML7tlRGnH0dt0OccQwFgD4GscviKItu/YHHfVJx77yc0a2rGjV4YDbIU49O6tXi5SUiKSnO90iAEAcEXaiqE1m45DLfzr9f+u0HWIsN1ckM1Nk1y6RVatEjjjC6RYBAOKIYawo+kXnltI2u7Ek1XC7Xq+363aIo6QkipQBwMcIO1GUkpwk95zT05wPDzz2Zb1dt0OcUaQMAL5F2ImyM3q1lcmXHiO52aFDVXpZr9fb4QCKlAHAt6jZiQENNKf3zDWzrrQYWWt0dOiKHh3nVHY/zCT7nxculh9X/sz7AQA+QtiJEf0iHdC1ldPNwL6FHv/26U55WS8sWyYXT/nM1E7pkGIi9rTpOk1eCNJeeR4A3I+wA1+saN0krbW53GpvoWTv3SV6eFa9PtGGFvX56MKUwes5JWJw88rzUIQ2wP0IO/DFitZ7GjWRTc1aSdvdP0uX7Rvk60N7mKJxvV2HHBPhy8kObuHrb9uHIkmU4OaV56EIbe7D80AkSZZl+f7YBYWFhZKdnS0FBQWSlZXldHMQJfNX/myGrGyvTbtTTlzzrZQnJUtFcoqUJ6dIRVKyNMlIl7S0VJHUVJGUlMDJPh/+Mxa31WGbyqRkue+9H+Xn4gqpSEqRiuRkc50+B/1ZmZws2c0ayxOXHicpaRHur6GXk5Oj/gGuB8UNDgfBkvYV8//39tNc/8FeU2izW01oiz+eh/9CW2Edv78JO4Qdz3pr0Qa5YdqiqstXfvmWjJ07xdE2JeQaRQcTlsIuF5RZ8s2m3fuCmoa0QOCs2BfY7J8n9ciVNs0zQu+roafwNkXhpO288PnPJX93eaD9+8Kn/VNPrZtnyJzbBkpKamyCY7R4JbTxPPwZ2goJO3VH2PFHz47Sep3G5SWSYlVKSqWeKuTx8/vI0e2aiVRUiJSXH/hntLap57abdxTJsg07JcWq2NfuSnM+2aqU1H3PQ8+3y2wkmSmy/77DHyPSZT4C4ic8OGkAqilURfu2CNdrsPzHok2yu7TSBLX9oVN7DJNMaMto0kiuOqWbJGtoDL6P2s4f7O312FbbPfgvH8vGXWWBdtvPJSnZBPZE6TGk5zN239/U7MDzK1prLYj9H66gSaYUSGbIB0efQceLuPyDY9XKn+WysOAWyd+u6l//WYCVlbWHo9oCUx1/58cNO2TSnB9NWEu2KgJBzaqU5MqKfT8Dly85tr10bJ5e/f5qe7yGnup5X2Vl5VJWWrbveQTCZ3K1j/UI7PtwCe1rurAuG/6fuJrm+zk13FYpSVXBLele7eVLrh6ikt1x3dbdpTLqh21V7a36mRx0XpJk48Z3pcMhmft/P/y+a7suuR7bNuD3KyRJXnrxC+m4u9SUDFim7UmypWlLKU9JdaRekrADz69orX9d6H8nK4FXtI4U3ILZwa1BhyKxP6jS0iTWulZa8vneubU+j9tvP83VAXRBhF5D7SGzeww1yOnPl0YcK7/Iy64emCIFTAeu/2HDDpm9eFMgsAWFTb1cFeIsS07s3Fw6tmgS+X4ina/t9mhtq6daaAjV5yBWpUhJubhZrohcVpcN54vrw+ffI1x/6lXPyuqWh5r/+9p7pbU88VqihbADX6xoHT5unJtgxX5eCW5eeR4Rw2dS0r7i8RRJkjSzj/Xr08nVoW3Hyp/l0Tr2GHZ047phGmIqK+Wz5VtlxPPzTVizg1vSvvCZbJ+vrJSJFx8l/dpn7Q9KkYJUTbfFYft1W3fJvxas2x8297U9cDnwUy+f0eMQyc1stP++wu/T4etLysqleG9poO2yv/3auxNMi5bjhbADz/PKitZeCW5eeB6eDm3R6jGMYwH9cYflSMtWWbU+j6NO7OPq8Nmu0pJpD9fe8znc5T2fCyP1fEagn8XxQoEyBcpIMF5Zf8MLz8MLU4TtQlKpIbQlyuwfnof7Cq3zawlt0Si0ZjZWPRB2ADQUoc09eB7+C22FhJ26I+wA8DsvhDbF83CPd1lnx10IOwAAeHcFZQqUAQBATGiwidf08gNx5/rlAAAAUULYAQAAnkbYAQAAnkbYAQAAnkbYAQAAnkbYAQAAnkbYAQAAnkbYAQAAnkbYAQAAnsYKynqQsn1HzNBlpwEAQGKwv7drO/IVYUdEdu3aZX526NDB6aYAAIAGfI/rMbJqwoFARaSyslI2btwomZmZkpSUWEeVjVdy1iC4bt06DpTqErwn7sL74S68H/55PyzLMkGnXbt2kpxcc2UOPTtauJScLO3bt3e6Ga6nOykfHO7Ce+IuvB/uwvvhj/cj+wA9OjYKlAEAgKcRdgAAgKcRdlCr9PR0ueeee8xPuAPvibvwfrgL74e7pLvg/aBAGQAAeBo9OwAAwNMIOwAAwNMIOwAAwNMIOwAAwNMIO6jR+PHj5bjjjjMrS7dp00bOPfdcWbZsmdPNwj4PPfSQWfH7xhtvdLopvrVhwwa59NJLpVWrVtKkSRPp3bu3LFiwwOlm+VJFRYXcfffd0rlzZ/NedO3aVe67775aj5mE6Pnoo4/knHPOMasZ62fTm2++GXK7vhdjx46Vtm3bmvdo0KBBsnz5cokHwg5qNG/ePLn22mvls88+k9mzZ0tZWZkMHjxYioqKnG6a73355Zfy7LPPSp8+fZxuim/t2LFDTjzxRElLS5N33nlHli5dKo8++qi0aNHC6ab50sMPPyyTJ0+Wp59+Wr7//ntzecKECfLUU0853TTfKCoqkr59+8rEiRMj3q7vx5NPPinPPPOMfP7559K0aVMZMmSIFBcXx7xtTD1HnW3dutX08GgI+tWvfuV0c3xr9+7dcswxx8ikSZPk/vvvl6OOOkqeeOIJp5vlO3fccYd88skn8vHHHzvdFIjI2WefLTk5OfLCCy9UXTds2DDTg/Dqq6862jY/SkpKkhkzZpgRAaVRQ3t8br75ZrnlllvMdQUFBeY9mzp1qlx00UUxbQ89O6gz3TFVy5YtnW6Kr2lv29ChQ00XMJzz73//W4499li54IILzB8BRx99tEyZMsXpZvnWCSecIHPmzJEff/zRXP7mm2/kv//9r5x55plONw0isnr1asnPzw/53NJjWh1//PEyf/78mD8+BwJFnY8Mr7Uh2m3fq1cvp5vjW9OmTZOFCxeaYSw4a9WqVWbYZPTo0XLnnXea9+QPf/iDNGrUSEaMGOF083zZ06ZH1+7Ro4ekpKSYGp4HHnhALrnkEqebBhETdJT25ATTy/ZtsUTYQZ17E7777jvzlxKcsW7dOrnhhhtM/VTjxo2dbo7v6R8A2rPz4IMPmsvas6P/R7QegbATf2+88Ya89tpr8vrrr8uRRx4pixYtMn+g6dAJ7wcYxkKtrrvuOpk1a5Z88MEH0r59e6eb41tfffWVbNmyxdTrpKammpPWT2nBn57Xv2QRPzqjpGfPniHXHXHEEbJ27VrH2uRnt956q+nd0doPnRU3fPhwuemmm8ysUjgvNzfX/Ny8eXPI9XrZvi2WCDuokRaUadDRIrO5c+eaKZ1wzsCBA2Xx4sXmL1b7pD0L2k2v57XrHvGjQ7rhSzFovUjHjh0da5Of7dmzR5KTQ7/S9P+E9sDBefr9oaFG66psOuyos7IGDBgQ88dnGAsHHLrSLuG33nrLrLVjj6tqUZnOcEB86XsQXi+lUzd1jRfqqOJPew20KFaHsS688EL54osv5LnnnjMnxJ+u76I1Onl5eWYY6+uvv5bHHntMrrzySqeb5quZoitWrAgpStY/xHRSi74vOqyoM0i7d+9uwo+ui6TDjPaMrZjSqedAJLp7RDq99NJLTjcN+5x88snWDTfc4HQzfGvmzJlWr169rPT0dKtHjx7Wc88953STfKuwsND8X8jLy7MaN25sdenSxfrjH/9olZSUON003/jggw8ifmeMGDHC3F5ZWWndfffdVk5Ojvk/M3DgQGvZsmVxaRvr7AAAAE+jZgcAAHgaYQcAAHgaYQcAAHgaYQcAAHgaYQcAAHgaYQcAAHgaYQcAAHgaYQcAAHgaYQcAAHgaYQcAAHgaYQeAZ5xyyily/fXXmwMOtmjRQnJycmTKlClSVFQkV1xxhTmYardu3eSdd95xuqkA4oiwA8BTXn75ZWndurU5CrkGn1GjRskFF1xgjlC+cOFCGTx4sAwfPlz27NnjdFMBxAkHAgXgqZ6diooK+fjjj81lPZ+dnS3nnXeevPLKK+a6/Px8adu2rcyfP1/69+/vcIsBxAM9OwA8pU+fPlXnU1JSpFWrVtK7d++q63RoS23ZssWR9gGIP8IOAE9JS0sLuZyUlBRynV5WlZWVcW8bAGcQdgAAgKcRdgAAgKcRdgAAgKcxGwsAAHgaPTsAAMDTCDsAAMDTCDsAAMDTCDsAAMDTCDsAAMDTCDsAAMDTCDsAAMDTCDsAAMDTCDsAAMDTCDsAAMDTCDsAAMDTCDsAAEC87P8BA9imsXtn0C0AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 计算 m 次多项式回归预测结果的 MSE 评价指标并绘图\n",
    "mse = []  # 用于存储各最高次多项式 MSE 值\n",
    "m = 1  # 初始 m 值\n",
    "m_max = 10  # 设定最高次数\n",
    "while m <= m_max:\n",
    "    model = make_pipeline(PolynomialFeatures(m, include_bias=False), LinearRegression())\n",
    "    model.fit(X_train, y_train)  # 训练模型\n",
    "    pre_y = model.predict(X_test)  # 测试模型\n",
    "    mse.append(mean_squared_error(y_test, pre_y.flatten()))  # 计算 MSE\n",
    "    m = m + 1\n",
    "\n",
    "print(\"MSE 计算结果: \", mse)\n",
    "# 绘图\n",
    "plt.plot([i for i in range(1, m_max + 1)], mse, \"r\")\n",
    "plt.scatter([i for i in range(1, m_max + 1)], mse)\n",
    "\n",
    "# 绘制图名称等\n",
    "plt.title(\"MSE of m degree of polynomial regression\")\n",
    "plt.xlabel(\"m\")\n",
    "plt.ylabel(\"MSE\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
